package com.springmvc02.demo.utils;

import org.springframework.core.convert.converter.Converter;

import java.util.Date;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;
import java.util.Locale;
/**
* 实现Converter接口
*/
public class MyDateConverter implements Converter<String, LocalDateTime> {
    // 使用线程安全的DateTimeFormatter替代SimpleDateFormat
    private static final DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    private static final DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
    @Override
    public LocalDateTime convert(String source) {
        LocalDateTime date = null;
        try {
            // 修复了正则表达式和逻辑问题，适当地调用parse方法
            if (source.matches("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$")){
                date = LocalDateTime.parse(source, formatter1);
            } else if (source.matches("^\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}$")){
                // 假设我们希望支持第二种格式，如果格式不匹配第一种，则尝试第二种格式
                date = LocalDateTime.parse(source, formatter2);
            }
            if (date == null) {
                // 如果格式不匹配，则抛出异常
                throw new IllegalArgumentException("Invalid date format: " + source);
            }
        } catch (Exception e) {
            // 记录日志而非仅仅打印堆栈跟踪
            // Log.error("Error parsing date", e); // 假设Log是合适的日志记录器
            // 根据业务需求，这里可以选择抛出异常或返回null
        }
        return date;
    }
    // 如果需要将LocalDateTime转换为Date，可以提供一个辅助方法
    public Date convertToLocalDateTimeToDate(LocalDateTime localDateTime) {
        if (localDateTime != null) {
            return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        }
        return null;
    }
}
